package cn.cool.middleware.biz_exception_retry.domain.adapter.repository;

import cn.cool.middleware.biz_exception_retry.domain.model.entity.BizExceptionRetryRecordEntity;
import cn.cool.middleware.biz_exception_retry.domain.model.entity.RetryRecordEntity;
import cn.cool.middleware.biz_exception_retry.domain.model.valobj.BizExceptionRetryModuleVO;
import cn.cool.middleware.biz_exception_retry.domain.model.valobj.BizExceptionRetryRecordVO;

import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;

public interface IBizExceptionRetryRepository {
    /** 保存业务异常重试注解信息 */
    Integer saveExceptionRetry(BizExceptionRetryRecordEntity record);

    /** 分页查询 */
    List<BizExceptionRetryRecordVO> listExceptionRetryRecords(RetryRecordEntity recordEntity);

    /** 将 record 记录的status设置为处理中 */
    int updateRecordStatus2Processing(Long bizExceptionRetryId, Integer status);

    /** 将 id = retryId的record的 deal_num加一 */
    int incrBizExceptionRetryDealNumber(Long retryId);

    /** 更新记录的状态 */
    int updateBizExceptionRetryRecordStatus(Long retryId, int recordRetryStatus);

    /** 向数据库插入 module */
    void insertModule(String exceptionModule);

    /** 根据 module 名字查询对象 */
    BizExceptionRetryModuleVO selectByExceptionModule(String exceptionModule);

    /** 加锁 */
    int lockModule(String exceptionModule, Date oldLockTime);

    /** 释放分布式锁 */
    void unLock(String exceptionModule);
}
